]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
gdmUtil: Refactor on no-more-messages case
authorAlessandro Bono <alessandro.bono369@gmail.com>
Mon, 8 Aug 2022 10:19:51 +0000 (12:19 +0200)
committerMarge Bot <marge-bot@gnome.org>
Tue, 9 Aug 2022 16:42:59 +0000 (16:42 +0000)
There are few places where we want to perform an action when no more
messages are present. Create a function that covers this use case
and use it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2412>

js/gdm/util.js

index 55d7c67c1d2ebbe7cc0ce0953972ef9c70318b9e..006841f459ef599a38769a7f3f77a3959d1bb1e9 100644 (file)
@@ -273,16 +273,13 @@ var ShellUserVerifier = class extends Signals.EventEmitter {
         this._userVerifierChoiceList.call_select_choice(serviceName, key, this._cancellable, null);
     }
 
-    answerQuery(serviceName, answer) {
-        if (!this.hasPendingMessages) {
+    async answerQuery(serviceName, answer) {
+        try {
+            await this._handlePendingMessages();
             this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
-        } else {
-            const cancellable = this._cancellable;
-            let signalId = this.connect('no-more-messages', () => {
-                this.disconnect(signalId);
-                if (!cancellable.is_cancelled())
-                    this._userVerifier.call_answer_query(serviceName, answer, cancellable, null);
-            });
+        } catch (e) {
+            if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+                logError(e);
         }
     }
 
@@ -702,7 +699,7 @@ var ShellUserVerifier = class extends Signals.EventEmitter {
             (this._reauthOnly || this._failCounter < this.allowedFailures);
     }
 
-    _verificationFailed(serviceName, shouldRetry) {
+    async _verificationFailed(serviceName, shouldRetry) {
         if (serviceName === FINGERPRINT_SERVICE_NAME) {
             if (this._fingerprintFailedId)
                 GLib.source_remove(this._fingerprintFailedId);
@@ -716,34 +713,36 @@ var ShellUserVerifier = class extends Signals.EventEmitter {
 
         const doneTrying = !shouldRetry || !this._canRetry();
 
-        if (doneTrying) {
-            this._disconnectSignals();
-
-            // eslint-disable-next-line no-lonely-if
-            if (!this.hasPendingMessages) {
+        this.emit('verification-failed', serviceName, !doneTrying);
+        try {
+            if (doneTrying) {
+                this._disconnectSignals();
+                await this._handlePendingMessages();
                 this._cancelAndReset();
-            } else {
-                const cancellable = this._cancellable;
-                let signalId = this.connect('no-more-messages', () => {
-                    this.disconnect(signalId);
-                    if (!cancellable.is_cancelled())
-                        this._cancelAndReset();
-                });
             }
+
+            await this._handlePendingMessages();
+            this._retry(serviceName);
+        } catch (e) {
+            if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+                logError(e);
         }
+    }
 
-        this.emit('verification-failed', serviceName, !doneTrying);
+    _handlePendingMessages() {
+        if (!this.hasPendingMessage)
+            return Promise.resolve();
 
-        if (!this.hasPendingMessages) {
-            this._retry(serviceName);
-        } else {
-            const cancellable = this._cancellable;
+        const cancellable = this._cancellable;
+        return new Promise((resolve, reject) => {
             let signalId = this.connect('no-more-messages', () => {
                 this.disconnect(signalId);
-                if (!cancellable.is_cancelled())
-                    this._retry(serviceName);
+                if (cancellable.is_cancelled())
+                    reject(new GLib.Error(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED, 'Operation was cancelled'));
+                else
+                    resolve();
             });
-        }
+        });
     }
 
     _onServiceUnavailable(_client, serviceName, errorMessage) {